Módulo 8 · Guia Interativo · 2026

Agents e Tool Use

LLMs que agem no mundo real. Function calling, ReAct, multi-agent systems e agentic RAG. O modelo decide quando buscar, o que buscar e se precisa buscar mais.

🔧 Function Calling 🎭 ReAct 👥 Multi-Agent 🕵️ Agentic RAG 🚀 Tool Use

1 O que são Agents?

De assistentes que respondem para assistentes que agem.

💡 Analogia
🤖Um Agent é como um assistente pessoal que não só responde perguntas, mas faz coisas. Ele agenda reuniões, busca informações, executa tarefas, toma decisões. Não é só um chatbot — é um executor.
Enquanto um LLM tradicional responde perguntas (input → output), um Agent tem um loop de decisão: observa o ambiente, pensa no que fazer, age, observa o resultado e repete. É a diferença entre um consultor que dá conselhos e um assistente que executa as tarefas.

LLM tradicional vs Agent

💬 LLM Tradicional

Fluxo: Pergunta → Resposta

Exemplo:

Usuário: "Qual o clima amanhã?"
LLM: "Não tenho acesso a dados em tempo real."

Limitado ao conhecimento de treinamento.

🤖 Agent

Fluxo: Observar → Pensar → Agir → Observar → Repetir

Exemplo:

Usuário: "Qual o clima amanhã?"
Agent: [Busca API de clima] → "Amanhã: 25°C, sol."

Acessa dados em tempo real via ferramentas.

As 3 capacidades de um Agent

👁️

Percepção

Observa o ambiente: input do usuário, resultados de ações anteriores, estado do sistema.

🧠

Raciocínio

Pensa no que fazer: planeja próximos passos, decide quais ferramentas usar, avalia resultados.

Ação

Executa tarefas: chama APIs, executa código, busca informações, modifica dados.

💡 Conexão com RAG: um Agent é como um RAG com superpoderes. Em vez de buscar uma vez e responder, o agente pode fazer múltiplas buscas, chamar APIs, executar código e decidir sozinho quando tem informação suficiente.

2 Function Calling — LLMs executando código

Como fazer o modelo chamar funções Python, APIs e ferramentas externas.

💡 Analogia
🔧Function calling é como dar ao LLM um kit de ferramentas. Ele não executa o código diretamente — ele diz "quero usar a ferramenta X com os parâmetros Y", e seu sistema executa e devolve o resultado.
O LLM não tem acesso direto à internet, banco de dados ou sistema de arquivos. Mas ele pode gerar uma "solicitação" dizendo qual função chamar e com quais argumentos. Seu código intercepta essa solicitação, executa a função e devolve o resultado ao modelo.

🎮 Simulador: Agent decidindo qual ferramenta usar

Clique em cada etapa para ver o raciocínio do agente.

Pergunta do Usuário
"Qual o clima em Porto Alegre e o status do ticket #4521?"
🧠
Thought (Pensamento)
"Preciso buscar duas informações independentes. Vou chamar duas ferramentas em paralelo."
Action 1: buscar_clima
buscar_clima(cidade="Porto Alegre")
Action 2: buscar_ticket
buscar_ticket(ticket_id="4521")
👁️
Observation 1
{cidade: "Porto Alegre", temp: "25°C", condicao: "sol"}
👁️
Observation 2
{id: "4521", status: "resolvido", solucao: "timeout aumentado"}
Resposta Final
"Em Porto Alegre: 25°C, sol. Ticket #4521: resolvido (timeout aumentado)."

Exemplo: Function Calling com Ollama

import ollama
import json

# Define as ferramentas disponíveis
tools = [
    {
        'type': 'function',
        'function': {
            'name': 'buscar_clima',
            'description': 'Busca a previsão do tempo para uma cidade',
            'parameters': {
                'type': 'object',
                'properties': {
                    'cidade': {
                        'type': 'string',
                        'description': 'Nome da cidade'
                    }
                },
                'required': ['cidade']
            }
        }
    },
    {
        'type': 'function',
        'function': {
            'name': 'buscar_ticket',
            'description': 'Busca informações de um ticket de suporte',
            'parameters': {
                'type': 'object',
                'properties': {
                    'ticket_id': {
                        'type': 'string',
                        'description': 'ID do ticket'
                    }
                },
                'required': ['ticket_id']
            }
        }
    }
]

# Funções reais que serão executadas
def buscar_clima(cidade):
    # Aqui você chamaria uma API real de clima
    return {"cidade": cidade, "temp": "25°C", "condicao": "sol"}

def buscar_ticket(ticket_id):
    # Aqui você buscaria no banco de dados
    return {"id": ticket_id, "status": "resolvido", "solucao": "timeout aumentado"}

# Usuário faz pergunta
mensagem = "Qual o clima em Porto Alegre e o status do ticket #4521?"

# Chama LLM com ferramentas
response = ollama.chat(
    model='llama3.1:8b',
    messages=[{'role': 'user', 'content': mensagem}],
    tools=tools
)

# LLM decide quais ferramentas chamar
if response.message.tool_calls:
    for tool_call in response.message.tool_calls:
        if tool_call.function.name == 'buscar_clima':
            args = json.loads(tool_call.function.arguments)
            resultado = buscar_clima(args['cidade'])
            print(f"Clima: {resultado}")
        elif tool_call.function.name == 'buscar_ticket':
            args = json.loads(tool_call.function.arguments)
            resultado = buscar_ticket(args['ticket_id'])
            print(f"Ticket: {resultado}")

Ferramentas comuns para Agents

🔍

Busca Web

SerpAPI, DuckDuckGo, Bing. Para informações em tempo real.

🗄️

Banco de Dados

SQL queries, Vector DB. Para dados internos.

💻

Execução de Código

Python REPL, shell. Para cálculos e processamento.

📧

APIs Externas

Email, calendários, CRMs. Para integração com sistemas.

⚠️ Segurança: function calling dá poder ao LLM. Sempre valide os argumentos, use sandbox para execução de código, e nunca dê acesso a funções destrutivas sem confirmação humana.

3 ReAct — Raciocinar + Agir

O loop de decisão que faz agents pensarem antes de agir.

💡 Analogia
🎭ReAct é como um detetive resolvendo um caso. Ele observa as pistas (Observation), pensa no que fazer (Thought), age (Action), vê o resultado (Observation) e repete até resolver o caso.
ReAct (Reasoning + Acting) é um padrão onde o modelo alterna entre raciocinar sobre o problema e executar ações. É a base da maioria dos agents modernos. O modelo não age cegamente — ele pensa, age, observa e ajusta.

O loop ReAct

🧠
Thought 1
"Preciso buscar as NFs de junho primeiro. Vou chamar a função buscar_nfs."
Action 1
buscar_nfs(mes="junho", ano=2025)
👁️
Observation 1
Encontradas 3 NFs: 12345 (R$48.500), 12346 (R$12.300), 12347 (R$8.200)
🧠
Thought 2
"Agora preciso somar os valores. Vou chamar calcular_soma."
Action 2
calcular_soma([48500, 12300, 8200])
👁️
Observation 2
Resultado: 69.000
Resposta Final
"O valor total das notas fiscais de junho é R$ 69.000,00."

Exemplo de prompt ReAct

# Prompt estruturado para ReAct
REACT_PROMPT = """Você é um assistente que resolve tarefas passo a passo.

Para cada passo, você deve:
1. PENSAR sobre o que fazer a seguir
2. AGIR chamando uma ferramenta (se necessário)
3. OBSERVAR o resultado da ação
4. REPETIR até ter informação suficiente para responder

Ferramentas disponíveis:
- buscar_nfs(mes, ano): busca notas fiscais
- calcular_soma(valores): soma uma lista de números
- buscar_ticket(ticket_id): busca informações de um ticket

Tarefa: {tarefa}

PENSAMENTO 1:"""

# LLM gera raciocínio estruturado
# PENSAMENTO 1: Preciso buscar as NFs de junho primeiro.
# AÇÃO 1: buscar_nfs(mes="junho", ano=2025)
# OBSERVAÇÃO 1: [lista de NFs]
# PENSAMENTO 2: Agora preciso somar os valores.
# AÇÃO 2: calcular_soma([48500, 12300, 8200])
# OBSERVAÇÃO 2: 69000
# RESPOSTA FINAL: O valor total é R$ 69.000,00.
💡 Vantagem do ReAct: o raciocínio é explícito e rastreável. Você pode ver exatamente por que o agente tomou cada decisão. Isso é crucial para debug e confiança.

4 Multi-Agent Systems

Vários agents colaborando para resolver problemas complexos.

💡 Analogia
👥Multi-agent é como uma equipe de especialistas. Um agent é o gerente de projeto, outro é o desenvolvedor, outro é o tester, outro é o documentador. Cada um tem sua especialidade e eles colaboram.
Em vez de um agent fazendo tudo, você tem múltiplos agents especializados que trabalham juntos. Um agent pode ser especialista em busca de documentos, outro em análise de dados, outro em geração de código. Eles se comunicam e delegam tarefas.

🎮 Visualização: Equipe de Agents

Clique em cada agent para ver sua especialidade.

👔
Gerente
Coordena tarefas
🔍
Pesquisador
Busca documentos
📊
Analista
Analisa dados
✍️
Redator
Escreve relatórios
Clique em um agent: veja sua especialidade e função na equipe

Frameworks populares

Framework Abordagem Uso ideal
AutoGen (Microsoft) Agents conversam entre si Colaboração complexa, debate
CrewAI Agents com papéis definidos Fluxos de trabalho estruturados
LangGraph Grafo de estados e transições Fluxos complexos com condições
MetaGPT Simulação de empresa de software Desenvolvimento de software

Exemplo: CrewAI para análise de documentos

from crewai import Agent, Task, Crew

# Define agents especializados
pesquisador = Agent(
    role="Pesquisador de Documentos",
    goal="Encontrar informações relevantes nos documentos",
    backstory="Especialista em buscar e extrair informações de documentos",
    tools=[buscar_documento, extrair_texto],
    verbose=True
)

analista = Agent(
    role="Analista de Dados",
    goal="Analisar as informações encontradas e identificar padrões",
    backstory="Especialista em análise de dados e identificação de tendências",
    tools=[analisar_dados, criar_grafico],
    verbose=True
)

redator = Agent(
    role="Redator de Relatórios",
    goal="Criar relatórios claros e bem estruturados",
    backstory="Especialista em comunicação técnica e redação de relatórios",
    tools=[escrever_relatorio, formatar_documento],
    verbose=True
)

# Define tarefas
tarefa_pesquisa = Task(
    description="Buscar todas as notas fiscais de equipamentos de rede em 2025",
    agent=pesquisador,
    expected_output="Lista de NFs com valores e datas"
)

tarefa_analise = Task(
    description="Analisar os gastos com equipamentos de rede e identificar tendências",
    agent=analista,
    expected_output="Análise de gastos com gráficos e insights"
)

tarefa_relatorio = Task(
    description="Criar um relatório executivo sobre os gastos com equipamentos de rede",
    agent=redator,
    expected_output="Relatório PDF com análise e recomendações"
)

# Cria crew e executa
crew = Crew(
    agents=[pesquisador, analista, redator],
    tasks=[tarefa_pesquisa, tarefa_analise, tarefa_relatorio],
    verbose=True
)

resultado = crew.kickoff()
print(resultado)
💡 Quando usar multi-agent: problemas complexos que exigem múltiplas especialidades, fluxos de trabalho com múltiplas etapas, ou quando você quer simular uma equipe humana.

5 Agentic RAG

O agent decide quando buscar, o que buscar e se precisa buscar mais.

💡 Analogia
🕵️Agentic RAG é como um detetive que não para na primeira pista. Ele busca, vê se a informação é suficiente, se não for, busca de novo com termos diferentes, consulta múltiplas fontes, até ter certeza da resposta.
No RAG tradicional, você busca uma vez e responde. No Agentic RAG, o agent decide: "essa busca retornou informação suficiente? Preciso buscar mais? Devo reformular a pergunta? Preciso consultar outra fonte?" É RAG com raciocínio.

RAG tradicional vs Agentic RAG

🔍 RAG Tradicional

Fluxo:

  1. Busca chunks (uma vez)
  2. Passa ao LLM
  3. LLM responde

❌ Se a busca falhar, resposta ruim.

🕵️ Agentic RAG

Fluxo:

  1. Agent pensa na estratégia de busca
  2. Busca chunks
  3. Avalia se informação é suficiente
  4. Se não, reformula e busca de novo
  5. Repete até ter informação suficiente
  6. Responde

✅ Adaptativo, robusto, iterativo.

Exemplo: Agent decidindo quando buscar mais

# Agentic RAG com LangGraph
from langgraph.graph import StateGraph, END
from typing import TypedDict

class AgentState(TypedDict):
    question: str
    context: str
    iterations: int
    answer: str

def decide_search_strategy(state: AgentState):
    # Agent pensa em como buscar
    return {
        "search_query": reformulate_query(state["question"])
    }

def search_documents(state: AgentState):
    # Busca chunks
    chunks = vector_db.search(state["search_query"], top_k=5)
    return {"context": format_context(chunks)}

def evaluate_sufficiency(state: AgentState):
    # Agent avalia se informação é suficiente
    evaluation = llm.invoke(f"""
    Pergunta: {state['question']}
    Contexto: {state['context']}
    
    A informação no contexto é suficiente para responder a pergunta?
    Responda SIM ou NÃO.
    """)
    
    if "SIM" in evaluation:
        return {"sufficient": True}
    else:
        return {"sufficient": False, "iterations": state["iterations"] + 1}

def generate_answer(state: AgentState):
    # Gera resposta final
    answer = llm.invoke(f"""
    Com base no contexto, responda a pergunta.
    Pergunta: {state['question']}
    Contexto: {state['context']}
    """)
    return {"answer": answer}

# Constrói grafo
workflow = StateGraph(AgentState)
workflow.add_node("decide", decide_search_strategy)
workflow.add_node("search", search_documents)
workflow.add_node("evaluate", evaluate_sufficiency)
workflow.add_node("answer", generate_answer)

workflow.add_edge("decide", "search")
workflow.add_edge("search", "evaluate")

# Condicional: se suficiente, responde; senão, busca de novo
workflow.add_conditional_edges(
    "evaluate",
    lambda x: "answer" if x["sufficient"] or x["iterations"] >= 3 else "decide"
)

workflow.set_entry_point("decide")
app = workflow.compile()

# Executa
result = app.invoke({
    "question": "Qual o timeout do endpoint /v2/sync?",
    "context": "",
    "iterations": 0,
    "answer": ""
})

print(result["answer"])

Vantagens do Agentic RAG

🔄

Iterativo

Pode buscar múltiplas vezes com estratégias diferentes.

🎯

Adaptativo

Reformula a busca se não encontrar informação relevante.

🧠

Raciocínio explícito

Você vê por que o agent tomou cada decisão.

🛡️

Robusto

Lida melhor com perguntas complexas e ambíguas.

⚠️ Custo: Agentic RAG pode fazer múltiplas buscas e chamadas ao LLM. Monitore o uso de tokens e defina limites de iterações para evitar custos explosivos.

6 Casos de uso práticos

Onde agents brilham — e onde não fazem sentido.

Quando usar Agents

🔍

Pesquisa complexa

"Compare os preços dos últimos 5 fornecedores de servidores" — requer múltiplas buscas e análise.

📊

Análise de dados

"Crie um relatório de gastos por departamento com gráficos" — requer busca, cálculo e formatação.

💻

Automação de tarefas

"Agende uma reunião com o time de desenvolvimento amanhã às 14h" — requer acesso a calendários.

🎯

Tomada de decisão

"Recomende o melhor fornecedor baseado em preço, prazo e qualidade" — requer análise multicritério.

Quando NÃO usar Agents

Tarefas simples

"Qual o timeout do endpoint?" — RAG simples resolve, agent só gasta mais tokens.

Latência crítica

Agents fazem múltiplas chamadas. Se você precisa de resposta em <1s, use RAG direto.

Custo restrito

Cada iteração do agent consome tokens. Se o orçamento é limitado, otimize primeiro.

Sem ferramentas disponíveis

Se você não tem APIs, bancos de dados ou sistemas para integrar, agent não adiciona valor.

Exemplo: Agent para suporte técnico da Nimbus Cloud

# Agent que resolve tickets de suporte
class SupportAgent:
    def __init__(self):
        self.tools = {
            "buscar_ticket": self.buscar_ticket,
            "buscar_documentacao": self.buscar_documentacao,
            "executar_comando": self.executar_comando,
            "atualizar_ticket": self.atualizar_ticket
        }
    
    def resolver_ticket(self, ticket_id):
        # 1. Busca informações do ticket
        ticket = self.buscar_ticket(ticket_id)
        
        # 2. Agent pensa na estratégia
        pensamento = llm.invoke(f"""
        Ticket: {ticket}
        
        Como resolver este problema?
        1. Preciso buscar documentação?
        2. Preciso executar algum comando?
        3. Preciso de mais informações do usuário?
        """)
        
        # 3. Executa ações baseado no raciocínio
        if "documentação" in pensamento:
            docs = self.buscar_documentacao(ticket["problema"])
            # ... continua raciocinando
        
        # 4. Atualiza ticket com solução
        self.atualizar_ticket(ticket_id, solucao)
        
        return solucao
💡 Regra prática: comece com RAG simples. Só adicione agents se você realmente precisa de raciocínio iterativo, múltiplas ferramentas ou automação complexa. Agents são poderosos, mas também complexos e caros.

7 Desafios e limitações

O que pode dar errado — e como mitigar.

🔄

Loops infinitos

Agent pode ficar preso buscando repetidamente. Solução: limite máximo de iterações.

💰

Custo explosivo

Cada iteração consome tokens. Solução: monitore custos, use modelos menores para raciocínio.

🐌

Latência alta

Múltiplas chamadas = resposta lenta. Solução: paralelize quando possível, cache resultados.

🔒

Segurança

Agent pode executar ações destrutivas. Solução: sandbox, confirmação humana para ações críticas.

🎯

Hallucinação em ações

Agent pode chamar ferramentas com argumentos errados. Solução: valide argumentos antes de executar.

🧩

Complexidade de debug

Raciocínio multi-etapa é difícil de depurar. Solução: logging detalhado, tracing (Langfuse).

Melhores práticas

Prática Por quê?
Limite de iterações Evita loops infinitos e custos explosivos
Logging detalhado Permite debug e auditoria de decisões
Confirmação humana Para ações destrutivas ou irreversíveis
Sandbox Isola execução de código em ambiente seguro
Validação de argumentos Previne chamadas de API com parâmetros inválidos
Cache de resultados Evita buscas repetidas para mesmas perguntas
Modelos menores para raciocínio Usa LLM grande só para decisões críticas
⚠️ Agents são poderosos, mas perigosos: comece com casos de uso simples, monitore de perto, e sempre tenha um humano no loop para ações críticas.

8 Conexão com RAG e próximos passos

Como agents evoluem o RAG — e o que vem depois.

💡 Conexão
🔗Agents são a evolução natural do RAG. Em vez de buscar uma vez e responder, o agent pode fazer múltiplas buscas, chamar APIs, executar código e decidir sozinho quando tem informação suficiente. É RAG com raciocínio e autonomia.

Evolução: LLM → RAG → Agent

Estágio Capacidade Exemplo
LLM Responde com base no treinamento "Não sei" ou alucina
RAG Busca documentos e responde fundamentado Busca uma vez, responde
Agentic RAG Decide quando buscar, reformula, busca de novo Busca iterativamente até ter informação suficiente
Agent completo Busca, executa código, chama APIs, toma decisões Resolve tarefas complexas end-to-end

O que vem depois?

🎨

Multimodal

Agents que entendem imagens, áudio e vídeo. Próximo módulo!

🎯

Fine-tuning

Adaptar o agent ao seu domínio específico.

🛠️

MLOps

Colocar agents em produção com monitoramento.

⚖️

Ética

Responsabilidade em systems autônomos.

💡 Próximo módulo: no Módulo 9, vamos explorar modelos multimodais — agents que podem ver imagens, ouvir áudio e processar vídeo. A evolução natural dos agents que vimos aqui!

🎯 Quiz — teste seu conhecimento

Clique em uma alternativa para ver se acertou.

1. O que é um Agent de IA?
Um modelo de linguagem que gera texto
Um sistema que observa, pensa, age e repete — com capacidade de usar ferramentas
Um banco de dados vetorial
2. O que é function calling?
Uma técnica de fine-tuning
Um tipo de embedding
Mecanismo onde o LLM solicita a execução de funções externas com parâmetros específicos
3. O que é ReAct?
Padrão onde o modelo alterna entre raciocinar (Thought) e agir (Action), observando resultados
Um framework de multi-agent
Uma técnica de chunking
4. Qual a principal diferença entre RAG tradicional e Agentic RAG?
Agentic RAG é mais rápido
Agentic RAG pode buscar iterativamente, reformular queries e avaliar se a informação é suficiente
Agentic RAG usa embeddings diferentes
5. O que é multi-agent system?
Um modelo com múltiplas camadas
Um agent que roda em múltiplas GPUs
Múltiplos agents especializados colaborando para resolver problemas complexos
6. Qual framework é popular para multi-agent systems?
CrewAI, AutoGen, LangGraph
PyTorch, TensorFlow
ChromaDB, Qdrant
7. Qual é um risco importante de agents autônomos?
Eles são muito lentos
Podem executar ações destrutivas sem confirmação humana
Não conseguem usar ferramentas
8. Quando você NÃO deve usar um agent?
Quando precisa de raciocínio iterativo
Quando precisa de múltiplas ferramentas
Quando a tarefa é simples e pode ser resolvida com RAG básico
9. Como mitigar loops infinitos em agents?
Definir limite máximo de iterações
Usar temperature alta
Aumentar o context window
10. Qual a evolução natural do RAG?
Fine-tuning
Agentic RAG → Agent completo com múltiplas ferramentas
Chunking semântico

O que vem a seguir?

Agora que você entende agents, vamos adicionar visão, áudio e vídeo ao sistema.

🎨
Próximo módulo
Módulo 9 · Modelos Multimodais
LLMs que enxergam, ouvem e falam. Vision-Language Models, OCR inteligente com LLMs, speech-to-text e RAG multimodal. Como integrar imagem, áudio e texto em um único sistema.

Conceitos que vamos construir aqui

🖼️

Vision Models

LLMs que entendem imagens (GPT-4o, Claude 3, LLaVA).

🎙️

Speech Models

Whisper para transcrição, TTS para fala.

🔍

RAG Multimodal

Indexar imagens, áudios e vídeos junto com texto.

🎬

Vídeo

Análise de vídeos com modelos multimodais.

💡 Conexão com agents: no próximo módulo, vamos ver como agents podem usar modelos multimodais para processar não só texto, mas também imagens, áudios e vídeos. É a evolução natural dos agents que vimos aqui!